package reversi.gui;

import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.SwingConstants;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

import reversi.cliente.controlConexion;
import reversi.xml.XmlParser;
import java.awt.Font;

public class PanelDeInformacionEste extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = -1157725179736093706L;
	private static JTextField txtNombreRIval;
	private static JTextArea textUsuarios;
	
	private static String mensaje;
	
	private static JButton btnActualizar;
	private static JCheckBox chckbxEmpiezaRival;
	private static JButton btnEmpezar;
	private static JButton btnTerminar;
	XmlParser xml = new XmlParser();
	
	public PanelDeInformacionEste() {
		setBorder(new EmptyBorder(0, 0, 0, 25));
		setToolTipText("");
		setLayout(new BorderLayout(0, 0));
		
		//Panel que maneja la lista de usuarios
		JPanel panelUsuarios = new JPanel();
		add(panelUsuarios, BorderLayout.CENTER);
		panelUsuarios.setLayout(new BoxLayout(panelUsuarios, BoxLayout.Y_AXIS));
		
		JLabel lblListaUsuarios = new JLabel("Lista Usuarios");
		lblListaUsuarios.setAlignmentX(Component.CENTER_ALIGNMENT);
		lblListaUsuarios.setAlignmentY(Component.TOP_ALIGNMENT);
		panelUsuarios.add(lblListaUsuarios);
		//textField.addActionListener(this);
		
		textUsuarios = new JTextArea();
		textUsuarios.setFont(new Font("Dialog", Font.PLAIN, 17));
		textUsuarios.setEditable(false);
		panelUsuarios.add(textUsuarios);
		
		btnActualizar = new JButton("ACTUALIZAR");
		btnActualizar.setEnabled(false);
		btnActualizar.setAlignmentY(Component.BOTTOM_ALIGNMENT);
		btnActualizar.setAlignmentX(Component.CENTER_ALIGNMENT);
		btnActualizar.addMouseListener(new clickActualizar());
		panelUsuarios.add(btnActualizar);
		
		//Panel que maneja los parametros del juego
		JPanel panelJuego = new JPanel();
		add(panelJuego, BorderLayout.SOUTH);
		panelJuego.setLayout(new BoxLayout(panelJuego, BoxLayout.Y_AXIS));
		
		chckbxEmpiezaRival = new JCheckBox("EMPIEZA EL RIVAL");
		chckbxEmpiezaRival.setEnabled(false);
		chckbxEmpiezaRival.setAlignmentX(Component.CENTER_ALIGNMENT);
		chckbxEmpiezaRival.setAlignmentY(Component.TOP_ALIGNMENT);
		panelJuego.add(chckbxEmpiezaRival);
		
		txtNombreRIval = new JTextField();
		txtNombreRIval.setHorizontalAlignment(SwingConstants.CENTER);
		txtNombreRIval.setText("NOMBRE DEL RIVAL");
		panelJuego.add(txtNombreRIval);
		txtNombreRIval.setColumns(10);
		
		btnEmpezar = new JButton("EMEPZAR PARTIDA");
		btnEmpezar.setEnabled(false);
		btnEmpezar.setAlignmentY(Component.BOTTOM_ALIGNMENT);
		btnEmpezar.setAlignmentX(Component.CENTER_ALIGNMENT);
		btnEmpezar.addMouseListener(new clickEmpezar());
		panelJuego.add(btnEmpezar);
		
		btnTerminar = new JButton("TERMINAR PARTIDA");
		btnTerminar.setEnabled(false);
		btnTerminar.setAlignmentX(Component.CENTER_ALIGNMENT);
		btnTerminar.setAlignmentY(Component.BOTTOM_ALIGNMENT);
		btnTerminar.addMouseListener(new clickTerminar());
		panelJuego.add(btnTerminar);
	}
	
	//Cuando se hace click en el boton EMPEZAR
	public class clickEmpezar extends MouseAdapter {
		public void mouseClicked(MouseEvent e){
			if(chckbxEmpiezaRival.isSelected()){
				mensaje=xml.crearXml( "empezar",txtNombreRIval.getText(),"negras"," " );
				//PanelDeJuego.ponerRival(null,"Verdes");
			}else{
				mensaje=xml.crearXml( "empezar",txtNombreRIval.getText(),"verdes"," " );
				//PanelDeJuego.ponerRival(null,"Negras");
			}	
			controlConexion.enviar(mensaje);
			/*//Envia un mensaje al servidor para establecer mi estado a ocupado
			mensaje=xml.crearXml("ocupado",PanelDeInformacionOeste.getUsuario(), "si");
			controlConexion.enviar(mensaje);*/
				
		}
	}
	public class clickActualizar extends MouseAdapter {
		public void mouseClicked(MouseEvent e){
			mensaje=xml.crearXml( "actualizar"," " );
			controlConexion.enviar(mensaje);
	
		}
	}
	public class clickTerminar extends MouseAdapter {
		public void mouseClicked(MouseEvent e){
			//JOptionPane.showMessageDialog(null, "La partida continua");
			int mc = JOptionPane.QUESTION_MESSAGE;
			int bc = JOptionPane.YES_NO_OPTION;
			int ch = JOptionPane.showConfirmDialog (null, "Esta seguro que desea terminar la partida?\n" +
													"El jugador con mas fichas en el tablero sera el ganador",
													"Solicitud de terminar partida", bc, mc);
			if (ch == 0){
				switch(PanelDeInformacionSur.resultadoPartida()){
				case 0:
					JOptionPane.showMessageDialog(null, "Has empatado");
					mensaje=xml.crearXml( "terminar",txtNombreRIval.getText(),"empatado");
					break;
				
				case 1:
					JOptionPane.showMessageDialog(null, "Has ganado");
					mensaje=xml.crearXml( "terminar",txtNombreRIval.getText(),"perdido");
					break;
				
				case 2:
					JOptionPane.showMessageDialog(null, "Has perdido");
					mensaje=xml.crearXml( "terminar",txtNombreRIval.getText(),"ganado");
					break;
				}
				setRival("NOMBRE DEL RIVAL");
				PanelDeJuego.resetearTablero();
				PanelDeInformacionSur.resetearPanel();
				
				controlConexion.enviar(mensaje);
				
				//Envia un mensaje al servidor para establecer mi estado a ocupado
				mensaje=xml.crearXml("ocupado",PanelDeInformacionOeste.getUsuario(), "no");
				controlConexion.enviar(mensaje);
				
				
			
			}else{
				JOptionPane.showMessageDialog(null, "La partida continua");
			}

			
	
		}
	}
	public static void actualizarLista(String lista){
		textUsuarios.setText(lista);		
	}
	public static void habilitarPanelEste(){
		btnActualizar.setEnabled(true);
		btnEmpezar.setEnabled(true);
		btnTerminar.setEnabled(true);
		chckbxEmpiezaRival.setEnabled(true);
	}
	public static void deshabilitarPanelEste(){
		btnActualizar.setEnabled(false);
		btnEmpezar.setEnabled(false);
		btnTerminar.setEnabled(false);
		chckbxEmpiezaRival.setEnabled(false);
		textUsuarios.setText(" ");
	}
	public static void setRival(String rival){
		txtNombreRIval.setText(rival);		
	}
}
